# db.py
import pymysql

# 优化建议：每次查询后关闭连接
class MySQLClient:
    def __init__(self, config):
        self.config = config

    def query(self, sql, params=None):
        conn = pymysql.connect(**self.config)
        cursor = conn.cursor()
        try:
            cursor.execute(sql, params or ())
            result = cursor.fetchall()
        finally:
            cursor.close()
            conn.close()
        return result

    def execute(self, sql, params=None):
        """
        执行单条 DML（INSERT/UPDATE/DELETE），自动 commit。
        返回 (rowcount, lastrowid)；对于非 INSERT，lastrowid 可能为 0。
        在发生异常时回滚并重新抛出异常。
        """
        conn = pymysql.connect(**self.config)
        cursor = conn.cursor()
        try:
            affected = cursor.execute(sql, params or ())
            conn.commit()
            lastrowid = cursor.lastrowid if hasattr(cursor, 'lastrowid') else None
            return affected, lastrowid
        except Exception:
            conn.rollback()
            raise
        finally:
            cursor.close()
            conn.close()

    def executemany(self, sql, seq_of_params):
        """
        批量执行同一条 SQL（如批量 INSERT/UPDATE），自动 commit。
        返回总受影响行数。
        在发生异常时回滚并重新抛出异常。
        """
        conn = pymysql.connect(**self.config)
        cursor = conn.cursor()
        try:
            cursor.executemany(sql, seq_of_params)
            conn.commit()
            return cursor.rowcount
        except Exception:
            conn.rollback()
            raise
        finally:
            cursor.close()
            conn.close()